#!/usr/bin/python3
# -*- coding:utf-8 -*-
#######################################################
# Author: liangliangSu
# Created Time: 2023-09-07 21:23
# Email: sll917@outlook.com
# Version: V1.0
# File Name: 15循环语句.py
#######################################################
print('(1)------------------完美分割线---------------------')
#Python 中的循环语句有 for 和 while。
#Python 中 while 语句的一般形式：
"""
while 判断条件(condition)：
    执行语句(statements)……
"""
#同样需要注意冒号和缩进。另外，在 Python 中没有 do..while 循环。

#以下实例使用了 while 来计算 1 到 100 的总和：
n = 100
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
print("1 到 %d 之和为: %d" % (n,sum))

#我们可以通过设置条件表达式永远不为 false 来实现无限循环，实例如下：
#var = 1
#while var == 1 :  # 表达式永远为 true
#   num = int(input("输入一个数字  :"))
#   print ("你输入的数字是: ", num)
#print ("Good bye!")
#无限循环在服务器上客户端的实时请求非常有用。

#while 循环使用 else 语句
#如果 while 后面的条件语句为 false 时，则执行 else 的语句块。
#语法格式如下：
"""
while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>
"""
# expr 条件语句为 true 则执行 statement(s) 语句块，
# 如果为 false，则执行 additional_statement(s)。

#循环输出数字，并判断大小：
print('(2)------------------完美分割线---------------------')
count = 0
while count < 5:
   print (count, " 小于 5")
   count = count + 1
else:
   print (count, " 大于或等于 5")

#Python for 循环可以遍历任何可迭代对象，如一个列表或者一个字符串。
#for循环的一般格式如下：
'''
for <variable> in <sequence>:
    <statements>
else:
    <statements>
'''

#Python for 循环实例：
print('(3)------------------完美分割线---------------------')
languages = ["C", "C++", "Perl", "Python"]
for x in languages:
    print (x)

#以下 for 实例中使用了 break 语句，break 语句用于跳出当前循环体：
print('(4)------------------完美分割线---------------------')
sites = ["C", "C++", "Perl", "Python"]
for site in sites:
    if site == "C++":
        print("C++")
        break
    print("循环数据 " + site)
else:
    print("没有循环数据!")
print("完成循环!")

#range()函数
#如果你需要遍历数字序列，可以使用内置range()函数。它会生成数列，例如:
print('(4-1)------------------完美分割线---------------------')
for i in range(5):
     print(i)

print('(4-2)------------------完美分割线---------------------')
#你也可以使用range指定区间的值：
for i in range(5,9) :
    print(i)

#也可以使range以指定数字开始并指定不同的增量(甚至可以是负数，有时这也叫做'步长'):
print('(4-3)------------------完美分割线---------------------')
for i in range(0, 10, 3) :
    print(i)

print('(4-4)------------------完美分割线---------------------')
#负数：
for i in range(-10, -100, -30) :
    print(i)

#您可以结合range()和len()函数以遍历一个序列的索引,如下所示:
print('(5-1)------------------完美分割线---------------------')
a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
print(len(a))

print('(5-2)------------------完美分割线---------------------')
for i in range(len(a)):
     print(i, a[i])

print('(5-3)------------------完美分割线---------------------')
#您可以结合range()和len()函数以遍历一个序列的索引,如下所示:
a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a)):
    print(len(a))
    print(i, a[i])

#break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止，任何对应的循环 else 块将不执行。
#continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句，然后继续进行下一轮循环。
# 1,while 中使用 break：
print('(6)------------------完美分割线---------------------')
n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)
print('循环结束。')

# 2,while 中使用 continue：
print('(7)------------------完美分割线---------------------')
n = 5
while n > 0:
    n -= 1
    if n == 2:
        continue
    print(n)
print('循环结束。')

#以下实例循环字符串 Runoob，碰到字母 o 跳过输出：
print('(8)------------------完美分割线---------------------')
for letter in 'Google':     # 第一个实例
   if letter == 'o':        # 字母为 o 时跳过输出
      continue
   print ('当前字母 :', letter)

print('(9)------------------完美分割线---------------------')
var = 9                    # 第二个实例
while var > 0:
   var = var -1
   if var == 5:             # 变量为 5 时跳过输出
      continue
   print ('当前变量值 :', var)
print ("Good bye!")

#循环语句可以有 else 子句，它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行，但循环被 break 终止时不执行。
#如下实例用于查询质数的循环例子:
print('(10)------------------完美分割线---------------------')
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等于', x, '*', n//x)
            break
    else:
        # 循环中没有找到元素
        print(n, ' 是质数')

#以下实例在字母为 o 时 执行 pass 语句块:
print('(11)------------------完美分割线---------------------')
for letter in 'Runoob':
   if letter == 'o':
      pass
      print ('执行 pass 块')
   print ('当前字母 :', letter)
print ("Good bye!")
